package com.cskaoyan.connectionpool;

import com.cskaoyan.utils.JDBCUtils;

import java.sql.Connection;
import java.util.LinkedList;

// 自己的数据库连接池
public class MyConnectionPool {

    // 定义一个数据库连接池的容器 从尾部放，从头部取
    static LinkedList<Connection> list;

    // 初始化大小
    static  int INIT_SIZE = 5;

    // 定义，当这个数据库连接池的连接个数小于2的时候，要扩容（增加五个）

    // 临界值
    static int MIN_SIZE = 2;

    // 扩容大小
    static int INCREMENT_SIZE = 5;


    // 初始化list
    static  {

        list = new LinkedList<>();
        addCapacity(INIT_SIZE);

    }



    // 获取连接 // 假如synchronized 这个锁来保证方法的线程安全
    public synchronized static Connection getConnection() {

        if (list.size() < MIN_SIZE) {

            addCapacity(INCREMENT_SIZE);
        }
        Connection connection = list.removeFirst();



        return connection;

    }


    // 返回连接
    public synchronized static void returnConnection(Connection connection){

        list.addLast(connection);
    }

    // 扩容的方法
    private static void addCapacity(int size) {

        if (size < 1) {
            return;
        }
        for (int i = 0; i < size; i++) {

            Connection connection = JDBCUtils.getConnection();
            list.addLast(connection);
        }
    }


}
